// 完整的集成测试脚本
import { saveLancedb, searchLancedb } from './src/core/embed.js';
import { CodeSnippetsCodebaseIndex } from './src/core/codeSnippetsIndex.js';
import CodeSnapped from './dist/treesitter.js';

// 定义要扫描的Java代码目录

async function runFullIntegrationTest() {
  console.log('开始完整集成测试...\n');
  
  try {
    // 从src/java目录动态提取代码
    const fileDir = "./src/java";
    const codeSnappeder = new CodeSnapped();
    const result = await codeSnappeder.chunkCode(fileDir);
    console.log("步骤1:从src/java目录提取的代码片段:", result);
    
    // 嵌入模型会在saveLancedb内部自动初始化
    console.log('嵌入模型将在内部自动初始化...\n');
    
    // 步骤2: 生成嵌入向量并保存
    console.log('步骤2: 生成嵌入向量并保存到LanceDB...');
    
    // 使用从Java代码目录提取的代码片段
    const vectorData = result.map((chunk, index) => ({
      text: chunk.code,
      path: chunk.filePath,
      code: chunk.code
    }));
    
    const saveResult = await saveLancedb(vectorData);
    
    if (saveResult) {
      console.log('所有测试内容的向量已成功保存到LanceDB!\n');
    } else {
      console.log('警告: 未能保存向量数据到LanceDB。\n');
    }
    
    // 步骤3: 语义搜索测试
    const testQueries = [
      "pageList",
      "examine"
    ];
    
    console.log('步骤3: 执行语义搜索测试...');
    for (const query of testQueries) {
      console.log(`\n  搜索查询: "${query}"`);
      const results = await searchLancedb(query, 2);
      
      if (results && results.length > 0) {
        console.log(`  找到 ${results.length} 个匹配结果:`);
        results.forEach((result, index) => {
          // 限制输出长度以便查看
          const displayText = result.length > 200 ? result.substring(0, 200) + '...' : result;
          console.log(`  结果 ${index + 1}: ${result}`);
        });
      } else {
        console.log('  没有找到匹配的结果');
      }
    }
    
    // 步骤4: SQLite数据库查询测试
    console.log('\n步骤4: 执行SQLite数据库查询测试...');
    const sqliteResults = await CodeSnippetsCodebaseIndex.getAll('pageList');
    if (sqliteResults && sqliteResults.length > 0) {
      console.log(`  找到 ${sqliteResults.length} 个匹配的代码片段`);
      console.log(`  示例: 标题="${sqliteResults[0].title}", 路径="${sqliteResults[0].path}", ID=${sqliteResults[0].id}`);
    } else {
      console.log('  没有找到匹配的代码片段');
    }
    
    console.log('\n测试完成! 所有功能正常工作。');
  } catch (error) {
    console.error('测试过程中出现错误:', error);
  }
}

runFullIntegrationTest();